#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

void run_child()
{
    
    printf("这是一个子进程：%d, 父进程为：%d\n", getpid(), getppid());
}

#define N 5

void test_1()
{
    for(int i=0; i<N; i++)
    {
        pid_t pid = fork();
        if(pid == 0)
        {
            run_child();
            sleep(1);
            exit(i);
        }
        else if(pid < 0)
        {
            perror("创建进程失败");
        }
        else{
            printf("这是一个父进程：%d, 其子进程为： %d\n", getpid(), pid);
            sleep(1);
        }
    }
    sleep(8);

    for(int i=0;i<N;i++)
    {
        int status = 0;
        pid_t id = waitpid(-1, &status, 0);
        printf("回收的子进程是：%d, 状态信息：%d，退出码为：%d\n", id, status&0x7f, (status>>8)&0xff);
        sleep(1);
    }
}


int main()
{
    test_1();

    return 0;
}
